import scrapy
import json
import re
import os

class JobSpider(scrapy.Spider):
	#给爬虫起个名字
	name = "job"
	#填入初始爬取的页面,也可自己更改"p"的值实现翻页,更改"jl"的值更改地区,更改"kw"的值修改搜索关键字
	start_urls = ['https://fe-api.zhaopin.com/c/i/sou?pageSize=60&cityId=702&workExperience=-1&education=-1&companyType=-1&employmentType=-1&jobWelfareTag=-1&kw=python&kt=3&lastUrlQuery={"p":1,"jl":"702","kw":"python","kt":"3"}']

	#对于每个start_urls响应回来的内容如何处理
	def parse(self,response):
		#响应回来的文本是一个json字符串
		res_json = json.loads(response.text)
		jobs_json = res_json["data"]["results"]

		for job in jobs_json:
			#获取每个岗位的url.
			url = job["positionURL"]
			#以防不测,转换一下
			url = str(url)
			#对于每个url请求以下,返回的响应用content处理
			yield scrapy.Request(url,callback=self.content)

	#处理parse生成的请求响应回来的结果
	def content(self,response):
		#获取响应的源码
		page = response.text

		#写出获取每个信息的正则表达式,岗位名字,公司名,薪资,地址,经验要求,学历要求
		regex_name = r'<div class="inner-left fl"[\s\S]*?<h1>([\s\S]*?)</h1>'
		regex_company = r'<h2><a [\s\S]*?target="_blank">([\s\S]*?)<img[\s\S]*?/></a></h2>'
		regex_money = r'<span>职位月薪：</span><strong>([\s\S]*?)<a'
		regex_address = r'<li><span>工作地点：</span><strong><a targ[\s\S]*?>([\s\S]*?)</a>-([\s\S]*?)</strong></li>'
		regex_experience = r'<li><span>工作经验：</span><strong>([\s\S]*?)</strong></li>'
		regex_education = r'<li><span>最低学历：</span><strong>([\s\S]*?)</strong></li>'

		#将获取的列表生成一个字典
		dic = {
		"name":re.findall(regex_name,page),
		"company":re.findall(regex_company,page),
		"money":re.findall(regex_money,page),
		"experience":re.findall(regex_experience,page),
		"education":re.findall(regex_education,page),
		}

		#对于每一个获取的内容,判断是否为空
		for i in dic:
			#如果使用正则没有获取到内容
			if not dic[i]:
				#赋值为"NotFound"
				dic[i]="NotFound"
			else:
				#将内容从列表提取出来覆盖列表
				dic[i]=dic[i][0]
		#工作地址的获取和判断是否为空
		job_address = re.findall(regex_address,page)
		if job_address:
			job_address = job_address[0]
		else:
			job_address = ("未知","未知")

		#使用css选择器获取职位介绍
		job_claims = response.css(".tab-inner-cont p::text").extract()
		#因为岗位名和公司名都要作为文件/文件夹名,使用正则去掉特殊符
		dic["name"] = re.sub(r'[？\\*|“<>:/()0123456789\s]', '', dic['name'])
		dic["company"] = re.sub(r'[？\\*|“<>:/()0123456789\s]', '', dic['company'])

		#生成目录
		path = "python岗位/{}".format(dic["company"])
		#判断目录是否存在,不存在则创建
		if not os.path.exists(path):
			os.makedirs(path)

		#将获取到的内容写入文件
		with open(path+"/{}.txt".format(dic['name']),'wt') as f:
			f.write("职位："+dic['name']+"\n")
			f.write("公司名称："+dic['company']+"\n")
			f.write("公司地址：{}-{}\n".format(job_address[0],job_address[1]))
			f.write("薪资："+dic['money']+'\n')
			f.write("学历要求：{}\n".format(dic['education']))
			f.write("经验要求：{}\n\n".format(dic['experience']))
			f.write("职位简介：\n")
			for i in job_claims:
				if i:
					f.write("\t{}\n".format(i))
				else:
					f.write("\n")
